home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / other / kaliosisquantrum / morb / playfield.s < prev    next >
Text File  |  1998-01-12  |  29KB  |  1,579 lines

  1. *
  2. * CdBSian Obviously Universal & Interactive Nonsense (COUIN)
  3. * (Absurdité CdBSienne Manifestement Universelle et Interactive)
  4. * ©1997-1998, CdBS Software (MORB)
  5. * Scrolling, sprites & double-buffer
  6. * $Id: Playfield.s 0.19 1997/09/09 00:12:21 MORB Exp MORB $
  7. *
  8.  
  9. ;fs "_ScrlInit"
  10. _ScrlInit:
  11.      moveq     #-1,d0
  12.      move.l    d0,pf_LeftCount(a5)
  13.      move.l    d0,pf_UpCount(a5)
  14.  
  15.      move.l    pf_Map(a5),a0
  16.      move.l    pf_Width(a5),d0
  17.      move.l    d0,d1
  18.      lsl.l     #2,d1
  19.      addq.l    #4,d1
  20.      sub.l     d1,a0
  21.      move.l    a0,pf_OMapAddr(a5)
  22.  
  23.      lsl.l     #6,d0
  24.      sub.w     #304*4,d0
  25.      move.l    d0,pf_MaxX(a5)
  26.  
  27.      move.l    pf_Height(a5),d0
  28.      lsl.l     #4,d0
  29.      sub.w     #256,d0
  30.      move.l    d0,pf_MaxY(a5)
  31.  
  32.      move.l    pf_X(a5),d6
  33.      bpl.s     .XPos
  34.      moveq     #0,d6
  35.      bra.s     .XOk
  36. .XPos:
  37.      move.l    pf_MaxX(a5),d0
  38.      cmp.l     d6,d0
  39.      bcc.s     .XOk
  40.      move.l    d0,d6
  41. .XOk:
  42.      move.l    d6,pf_X(a5)
  43.      add.l     #HMargin/2*TileWidth*64,d6
  44.      move.l    d6,pf_iX(a5)
  45.      move.l    d6,pf_LastX(a5)
  46.  
  47.      move.l    pf_Y(a5),d7
  48.      bpl.s     .YPos
  49.      moveq     #0,d7
  50.      bra.s     .YOk
  51. .YPos:
  52.      move.l    pf_MaxY(a5),d0
  53.      cmp.l     d7,d0
  54.      bcc.s     .YOk
  55.      move.l    d0,d7
  56. .YOk:
  57.      move.l    d7,pf_Y(a5)
  58.      add.l     #VMargin/2*TileHeight,d7
  59.      move.l    d7,pf_iY(a5)
  60.      move.l    d7,pf_LastY(a5)
  61.  
  62.      move.l    d7,d0
  63.      divu      #BufferHeight,d0
  64.      swap      d0
  65.      move.w    #BufferHeight,d1
  66.      sub.w     d0,d1
  67.  
  68.      move.l    d1,d4
  69.      add.w     d7,d4
  70.      move.l    pf_Y(a5),d3
  71.      and.b     #$f0,d3
  72.      sub.w     d3,d4
  73.      move.w    d4,pf_WrapPos+2(a5)
  74.  
  75.      add.w     #$28,d1
  76.      move.l    pf_WPosPtr(a5),a1
  77.      move.w    d1,(a1)
  78.  
  79.  
  80. **** Obsolete - MergeCopperLists s'occupe de tout ****
  81. ;         cmp.w     #$100,d1
  82. ;         bcs.s     .Gna
  83. ;         move.l    #$ffe1fffe,Wrap2
  84. ;         bra.s     .Couin
  85. ;.Gna:
  86. ;         move.l    #$01800000,Wrap2
  87. ;.Couin:
  88.  
  89.      ;bsr       _HardwareScrolling
  90.  
  91.      move.l    d0,d1
  92.      and.b     #$f0,d1
  93.      mulu      #LineSize,d1
  94.      mulu      #LineSize,d0
  95.  
  96.      move.l    d6,d3
  97.      lsr.l     #5,d3
  98.  
  99.      and.b     #$fc,d3
  100.      addq.l    #4,d3
  101.      add.l     d3,d0
  102.      move.l    d0,d1
  103.      ;add.l     pf_ODispBitmap(a5),d0
  104.      ;add.l     pf_OWorkBitmap(a5),d1
  105.  
  106.      lsr.l     #6,d6
  107.      move.l    d6,pf_X16(a5)
  108.      lsr.l     #4,d7
  109.      move.l    d7,pf_Y16(a5)
  110.      move.l    d7,d2
  111.      mulu      pf_Width+2(a5),d2
  112.      add.l     d6,d2
  113.      add.l     a0,d2
  114.      move.l    d2,pf_CMapAddr(a5)
  115.  
  116.      subq.l    #2,d7
  117.      divu      #NbVerTile,d7
  118.  
  119.      swap      d7
  120.      move.w    d7,pf_BufY16+2(a5)
  121.      mulu      #LineSize*TileHeight,d7
  122.      move.l    d7,pf_VBitmapOffset(a5)
  123.  
  124.      add.l     d6,d6
  125.      move.l    d6,pf_WBitmapOffset(a5)
  126.      add.l     d6,d7
  127.      move.l    d7,pf_BitmapOffset(a5)
  128.      add.l     #(BufferHeight-1)*LineSize,d6
  129.      move.l    d6,pf_MaxBmOffset(a5)
  130.  
  131.      ;rts
  132.      move.l    pf_Bitmaps(a5),d3
  133.      add.l     d7,d3
  134.      move.l    d6,d4
  135.      add.l     pf_Bitmaps(a5),d4
  136.      move.l    d2,a3
  137.      move.l    pf_Width(a5),d5
  138.      sub.l     #NbHorTile,d5
  139.      move.w    #NbVerTile-1,d7
  140.  
  141.      ;move.w    #$4000,intena(a6)
  142.      ;lea       $8f00000,a6
  143.  
  144.      ;bsr       _WaitVbl
  145.  
  146. .YLoop:
  147.      move.w    #NbHorTile-1,d6
  148.  
  149. .XLoop:
  150.      moveq     #0,d2
  151.      move.b    (a3)+,d2
  152.      moveq     #0,d1
  153.      moveq     #0,d0
  154.      sub.l     a0,a0
  155.      bsr.s     _Gerflor
  156.      addq.l    #2,d3
  157.      dbf       d6,.XLoop
  158.  
  159.      add.l     d5,a3
  160.      add.l     #LineSize*TileHeight-BufferWidth,d3
  161.      cmp.l     d4,d3
  162.      bcs.s     .Gloups
  163.      move.l    pf_WBitmapOffset(a5),d3
  164.      add.l     pf_Bitmaps(a5),d3
  165. .Gloups:
  166.  
  167.      dbf       d7,.YLoop
  168.  
  169.  
  170.      lea       pf_Bitmaps(a5),a4
  171.      move.l    (a4)+,a0
  172.      move.l    (a4)+,a1
  173.      move.l    (a4)+,a2
  174.      move.l    (a4)+,a3
  175.      move.l    #BufferSize/4,d0
  176. .CpyLoop:
  177.      move.l    (a0)+,d1
  178.      move.l    d1,(a1)+
  179.      move.l    d1,(a2)+
  180.      move.l    d1,(a3)+
  181.      subq.l    #1,d0
  182.      bne.s     .CpyLoop
  183.  
  184.      rts
  185.  
  186.      sub.l     a0,a0
  187.      moveq     #0,d0
  188.      bsr       _GetBlitNode
  189.      move.l    a1,a0
  190.      move.l    #$09f00000,(a0)+
  191.      moveq     #-1,d0
  192.      move.l    d0,(a0)+
  193.      addq.l    #8,a0
  194.      ;move.l    pf_ODispBitmap(a5),(a0)+
  195.      ;move.l    pf_OWorkBitmap(a5),(a0)
  196.      lea       16(a0),a4
  197.      addq.l    #8,a0
  198.      clr.l     (a4)
  199.      move.w    #(BufferHeight+1)*NbPlanes,(a0)+
  200.      move.w    #BufferWidth/2,(a0)
  201.      bsr       _AddBlitNode
  202.  
  203.      ;lea       CustomBase,a6
  204.      ;move.w    #$c000,intena(a6)
  205.  
  206.      rts
  207. ;fe
  208.  
  209. ;fs "_HardwareScrolling"
  210. _HardwareScrolling:          ; a5=Playfield structure
  211.      move.l    pf_X(a5),d6
  212.      bpl.s     .XPos
  213.      moveq     #0,d6
  214.      bra.s     .XOk
  215. .XPos:
  216.      move.l    pf_MaxX(a5),d0
  217.      cmp.l     d6,d0
  218.      bcc.s     .XOk
  219.      move.l    d0,d6
  220. .XOk:
  221.      move.l    d6,pf_X(a5)
  222.      add.l     #HMargin/2*TileWidth*64,d6
  223.      move.l    d6,pf_iX(a5)
  224.      move.l    d6,d2
  225.      sub.l     pf_LastX(a5),d6
  226.      move.l    d6,pf_DeltaX(a5)
  227.      move.l    d2,pf_LastX(a5)
  228.  
  229.      move.l    pf_Y(a5),d7
  230.      bpl.s     .YPos
  231.      moveq     #0,d7
  232.      bra.s     .YOk
  233. .YPos:
  234.      move.l    pf_MaxY(a5),d0
  235.      cmp.l     d7,d0
  236.      bcc.s     .YOk
  237.      move.l    d0,d7
  238. .YOk:
  239.      move.l    d7,pf_Y(a5)
  240.      add.l     #VMargin/2*TileHeight,d7
  241.      move.l    d7,pf_iY(a5)
  242.      move.l    d7,d5
  243.      sub.l     pf_LastY(a5),d7
  244.      move.l    d7,pf_DeltaY(a5)
  245.      move.l    d5,pf_LastY(a5)
  246.  
  247.  
  248. **** ¡”$“®“® ¡©¡ |“$ ™“$™$ ’“ ’“—|ª©“‡“”™$ |¡‡¡™“
  249. **** “™ |“ ß®ª”©h“‡“”™ $µ® |“ ‡“®’¡“® ’“ $©®ø||¡”9 $—“©¡ª| —øµ®
  250. **** |“$ ’“—|ª©“‡“”™$ ¡‡—ø®tª”™$ “” ’øµß|“ ßµ££“®
  251.  
  252.  
  253.      move.l    d5,d0
  254.      divu      #BufferHeight,d0
  255.      swap      d0
  256.      move.w    #BufferHeight,d1
  257.      sub.w     d0,d1
  258.  
  259.      move.l    pf_iY(a5),d4
  260.      add.w     d1,d4
  261.      move.l    pf_Y(a5),d3
  262.      and.b     #$f0,d3
  263.      sub.w     d3,d4
  264.      move.w    d4,pf_WrapPos+2(a5)
  265.  
  266.      add.w     #$28,d1
  267.      move.l    pf_WPosPtr(a5),a0
  268.      move.w    d1,(a0)
  269.  
  270.      move.l    d0,d1
  271.      and.b     #$f0,d1
  272.      mulu      #LineSize,d1
  273.      mulu      #LineSize,d0
  274.  
  275.      move.l    d2,d3
  276.      lsr.l     #5,d3
  277.      and.b     #$fc,d3
  278.      addq.l    #4,d3
  279.      add.l     d3,d0
  280.  
  281.      lea       pf_Bitmaps(a5),a1
  282.      add.l     pf_DispOfst(a5),a1
  283.      move.l    (a1),d1
  284.      add.l     d1,d0
  285.  
  286.      move.l    pf_BpPtrs(a5),a0
  287.      moveq     #NbPlanes-1,d4
  288. .BpLoop:
  289.      swap      d0
  290.      move.w    d0,(a0)
  291.      addq.l    #4,a0
  292.      swap      d0
  293.      move.w    d0,(a0)
  294.      addq.l    #4,a0
  295.      add.l     #BufferWidth,d0
  296.      dbf       d4,.BpLoop
  297.  
  298.      add.l     d3,d1
  299.      move.l    pf_BpWPtrs(a5),a0
  300.      moveq     #NbPlanes-1,d3
  301. .WBpLoop:
  302.      swap      d1
  303.      move.w    d1,(a0)
  304.      addq.l    #4,a0
  305.      swap      d1
  306.      move.w    d1,(a0)
  307.      addq.l    #4,a0
  308.      add.l     #BufferWidth,d1
  309.      dbf       d3,.WBpLoop
  310.  
  311.      ;move.l    d2,pf_HShift(a5)
  312.      sub.l     #64,d2
  313.      not.w     d2
  314.  
  315.      move.w    d2,d0
  316.      and.w     #2,d0
  317.      ror.w     #2,d0
  318.      move.b    d2,d0
  319.      and.b     #$40,d0
  320.      lsr.b     #6,d0
  321.      ror.w     #2,d0
  322.      lsr.b     #2,d2
  323.      and.b     #$f,d2
  324.      lsl.b     #4,d2
  325.      move.b    d2,d0
  326.      ;move.w    d0,d2
  327.      ;lsr.w     #4,d2
  328.      ;or.w      d2,d0
  329.  
  330.      ;move.w    d0,_BplCon1
  331.      rts
  332. ;fe
  333. ;fs "_GerflorScrolling"
  334. _GerflorScrolling: ; a5=Playfield structure
  335.      movem.l   pf_DeltaX(a5),d6-7
  336.      movem.l   pf_iX(a5),d3/d5
  337.  
  338.  
  339.      move.l    pf_iX(a5),d0
  340.      lsr.l     #6,d0
  341.      move.l    pf_iY(a5),d1
  342.      lsr.l     #4,d1
  343.      move.l    d1,d2
  344.      mulu      pf_Width+2(a5),d2
  345.      add.l     d0,d2
  346.      add.l     pf_OMapAddr(a5),d2
  347.      move.l    d2,pf_CMapAddr(a5)
  348.  
  349.      move.l    pf_X16(a5),d2
  350.      cmp.l     d0,d2
  351.      beq.s     .HorOk
  352.      move.l    d0,pf_X16(a5)
  353.      sub.l     d2,d0
  354.      bpl.s     .UlOk
  355.      move.w    pf_UpCount(a5),d2
  356.      ble.s     .UlNoUp
  357.      subq.w    #1,d2
  358.      move.w    d2,pf_UpCount(a5)
  359. .UlNoUp:
  360.      move.w    pf_DownCount(a5),d2
  361.      ble.s     .UlOk
  362.      subq.w    #1,d2
  363.      move.w    d2,pf_DownCount(a5)
  364. .UlOk:
  365.  
  366.      moveq     #-1,d0
  367.      move.l    d0,pf_LeftCount(a5)
  368. .HorOk:
  369.  
  370.      move.l    pf_Y16(a5),d2
  371.      cmp.l     d1,d2
  372.      beq.s     .VerOk
  373.      move.l    d1,pf_Y16(a5)
  374.      sub.l     d2,d1
  375.      bpl.s     .UuOk
  376.      move.w    pf_LeftCount(a5),d2
  377.      ble.s     .UuNoLeft
  378.      subq.w    #1,d2
  379.      move.w    d2,pf_LeftCount(a5)
  380. .UuNoLeft:
  381.      move.w    pf_RightCount(a5),d2
  382.      ble.s     .UuOk
  383.      subq.w    #1,d2
  384.      move.w    d2,pf_RightCount(a5)
  385. .UuOk:
  386.  
  387.      moveq     #-1,d0
  388.      move.l    d0,pf_UpCount(a5)
  389. .VerOk:
  390.  
  391.      move.l    pf_Y16(a5),d0
  392.      subq.l    #2,d0
  393.      divu      #NbVerTile,d0
  394.      swap      d0
  395.      move.w    d0,pf_BufY16+2(a5)
  396.  
  397.      mulu      #LineSize*TileHeight,d0
  398.      move.l    d0,pf_VBitmapOffset(a5)
  399.      move.l    pf_X16(a5),d1
  400.      add.l     d1,d1
  401.      move.l    d1,pf_WBitmapOffset(a5)
  402.      add.l     d1,d0
  403.      move.l    d0,pf_BitmapOffset(a5)
  404.      add.l     #(BufferHeight-1)*LineSize,d1
  405.      move.l    d1,pf_MaxBmOffset(a5)
  406.  
  407.      move.l    #NbHorTile*2,d0
  408.      and.l     #$f,d5
  409.      tst.l     d7
  410.      beq.s     .VerScrollOk
  411.      spl       d0
  412.      move.b    d0,pf_UpDownFlag(a5)
  413.      bne.s     .DoDown
  414.      move.l    d5,d0
  415.      neg.w     d7
  416.      divu      d7,d0
  417.      tst.w     pf_UpCount(a5)
  418.      bpl.s     .VerScrollOk
  419.      move.l    pf_CMapAddr(a5),pf_UMapAddr(a5)
  420.      move.l    pf_BitmapOffset(a5),pf_UBmOffset(a5)
  421.      move.w    #BufferWidth/(TileWidth*2),pf_UpCount(a5)
  422.      bra.s     .VerScrollOk
  423.  
  424. .DoDown:
  425.      moveq     #TileHeight,d0
  426.      sub.b     d5,d0
  427.      divu      d7,d0
  428.      tst.w     pf_DownCount(a5)
  429.      bpl.s     .VerScrollOk
  430.      move.l    #NbVerTile-1,d1
  431.      mulu      pf_Width+2(a5),d1
  432.      add.l     pf_CMapAddr(a5),d1
  433.      move.l    d1,pf_DMapAddr(a5)
  434.      move.l    pf_VBitmapOffset(a5),d1
  435.      add.l     #(BufferHeight-TileHeight)*LineSize,d1
  436.      move.l    #BufferHeight*LineSize,d2
  437.      cmp.l     d2,d1
  438.      bcs.s     .DOk
  439.      sub.l     d2,d1
  440. .DOk:
  441.      move.l    pf_X16(a5),d2
  442.      add.l     d2,d2
  443.      add.l     d2,d1
  444.      move.l    d1,pf_DBmOffset(a5)
  445.      move.w    #BufferWidth/(TileWidth*2),pf_DownCount(a5)
  446. .VerScrollOk:
  447.  
  448.      move.l    d0,d7
  449.      swap      d7
  450.      tst.w     d7
  451.      bne.s     .VRoundUp
  452.      tst.w     d0
  453.      bne.s     .VNoRoundUp
  454. .VRoundUp:
  455.      addq.w    #1,d0
  456. .VNoRoundUp:
  457.      move.w    d0,-(a7)
  458.  
  459.      move.l    #NbVerTile*2,d0
  460.      and.l     #$3f,d3
  461.      tst.l     d6
  462.      beq.s     .HorScrollOk
  463.      spl       d0
  464.      move.b    d0,pf_LeftRightFlag(a5)
  465.      bne.s     .DoRight
  466.      move.l    d3,d0
  467.      neg.w     d6
  468.      divu      d6,d0
  469.      tst.w     pf_LeftCount(a5)
  470.      bpl.s     .HorScrollOk
  471.      move.l    pf_WBitmapOffset(a5),pf_LWBmOffset(a5)
  472.      move.l    pf_MaxBmOffset(a5),pf_LMBmOffset(a5)
  473.      move.l    pf_CMapAddr(a5),pf_LMapAddr(a5)
  474.      move.l    pf_BitmapOffset(a5),pf_LBmOffset(a5)
  475.      move.w    #BufferHeight/TileHeight,pf_LeftCount(a5)
  476.      bra.s     .HorScrollOk
  477.  
  478. .DoRight:
  479.      moveq     #TileWidth*64,d0
  480.      sub.b     d3,d0
  481.      divu      d6,d0
  482.      tst.w     pf_RightCount(a5)
  483.      bpl.s     .HorScrollOk
  484.      move.l    pf_WBitmapOffset(a5),pf_RWBmOffset(a5)
  485.      move.l    pf_MaxBmOffset(a5),pf_RMBmOffset(a5)
  486.      move.l    pf_CMapAddr(a5),d1
  487.      add.l     #NbHorTile-1,d1
  488.      move.l    d1,pf_RMapAddr(a5)
  489.      move.l    pf_BitmapOffset(a5),d1
  490.      add.l     #BufferWidth-TileWidth*2,d1
  491.      move.l    d1,pf_RBmOffset(a5)
  492.      move.w    #BufferHeight/TileHeight,pf_RightCount(a5)
  493.  
  494. .HorScrollOk:
  495.      move.l    d0,d6
  496.      swap      d6
  497.      tst.w     d6
  498.      bne.s     .HRoundUp
  499.      tst.w     d0
  500.      bne.s     .HNoRoundUp
  501. .HRoundUp:
  502.      addq.w    #1,d0
  503. .HNoRoundUp:
  504.  
  505.      tst.b     pf_LeftRightFlag(a5)
  506.      bne.s     .DrwRight
  507.  
  508.      move.w    pf_LeftCount(a5),d4
  509.      ble.s     .Ni
  510.      ext.l     d4
  511.      divu      d0,d4
  512.      move.l    d4,d0
  513.      swap      d0
  514.      tst.w     d0
  515.      bne.s     .LRoundUp
  516.      subq.w    #1,d4
  517. .LRoundUp:
  518.      sub.w     d4,pf_LeftCount(a5)
  519.      sub.w     #1,pf_LeftCount(a5)
  520.  
  521.      move.l    pf_LBmOffset(a5),d5
  522.      move.l    d5,d6
  523.      lea       pf_Bitmaps(a5),a2
  524.      add.l     (a2),d6
  525.      move.l    d5,d7
  526.      add.l     4(a2),d7
  527.      move.l    d5,a4
  528.      add.l     8(a2),a4
  529.      move.l    d5,a1
  530.      add.l     12(a2),a1
  531.      move.l    pf_LMapAddr(a5),a3
  532.  
  533. .LeftLoop:
  534.      moveq     #0,d2
  535.      move.b    (a3),d2
  536.      move.l    d6,d3
  537.      st        d1
  538.      moveq     #0,d0
  539.      sub.l     a0,a0
  540.      bsr       _Gerflor
  541.  
  542.      moveq     #0,d2
  543.      move.b    (a3),d2
  544.      move.l    d7,d3
  545.      st        d1
  546.      moveq     #0,d0
  547.      sub.l     a0,a0
  548.      bsr       _Gerflor
  549.  
  550.      moveq     #0,d2
  551.      move.b    (a3),d2
  552.      move.l    a4,d3
  553.      st        d1
  554.      moveq     #0,d0
  555.      sub.l     a0,a0
  556.      bsr       _Gerflor
  557.  
  558.      moveq     #0,d2
  559.      move.b    (a3),d2
  560.      move.l    a1,d3
  561.      st        d1
  562.      moveq     #0,d0
  563.      sub.l     a0,a0
  564.      bsr       _Gerflor
  565.  
  566.      add.l     pf_Width(a5),a3
  567.      add.l     #LineSize*TileHeight,d5
  568.      add.l     #LineSize*TileHeight,d6
  569.      add.l     #LineSize*TileHeight,d7
  570.      lea       LineSize*TileHeight(a4),a4
  571.      lea       LineSize*TileHeight(a1),a1
  572.  
  573.      cmp.l     pf_LMBmOffset(a5),d5
  574.      bcs.s     .LDontWrap
  575.  
  576.      move.l    pf_LWBmOffset(a5),d5
  577.      move.l    d5,d6
  578.      add.l     (a2),d6
  579.      move.l    d5,d7
  580.      add.l     4(a2),d7
  581.      move.l    d5,a4
  582.      add.l     8(a2),a4
  583.      move.l    d5,a1
  584.      add.l     12(a2),a1
  585.  
  586. .LDontWrap:
  587.  
  588.      dbf       d4,.LeftLoop
  589.      move.l    d5,pf_LBmOffset(a5)
  590.      move.l    a3,pf_LMapAddr(a5)
  591.      bra.s     .Ni
  592.  
  593. .DrwRight:
  594.      move.w    pf_RightCount(a5),d4
  595.      ble.s     .Ni
  596.      ext.l     d4
  597.      divu      d0,d4
  598.      move.l    d4,d0
  599.      swap      d0
  600.      tst.w     d0
  601.      bne.s     .RRoundUp
  602.      subq.w    #1,d4
  603. .RRoundUp:
  604.      sub.w     d4,pf_RightCount(a5)
  605.      sub.w     #1,pf_RightCount(a5)
  606.  
  607.      move.l    pf_RBmOffset(a5),d5
  608.      move.l    d5,d6
  609.      lea       pf_Bitmaps(a5),a2
  610.      add.l     (a2),d6
  611.      move.l    d5,d7
  612.      add.l     4(a2),d7
  613.      move.l    d5,a4
  614.      add.l     8(a2),a4
  615.      move.l    d5,a1
  616.      add.l     12(a2),a1
  617.      move.l    pf_RMapAddr(a5),a3
  618.  
  619. .RightLoop:
  620.      moveq     #0,d2
  621.      move.b    (a3),d2
  622.      move.l    d6,d3
  623.      st        d1
  624.      moveq     #0,d0
  625.      sub.l     a0,a0
  626.      bsr       _Gerflor
  627.  
  628.      moveq     #0,d2
  629.      move.b    (a3),d2
  630.      move.l    d7,d3
  631.      st        d1
  632.      moveq     #0,d0
  633.      sub.l     a0,a0
  634.      bsr       _Gerflor
  635.  
  636.      moveq     #0,d2
  637.      move.b    (a3),d2
  638.      move.l    a4,d3
  639.      st        d1
  640.      moveq     #0,d0
  641.      sub.l     a0,a0
  642.      bsr       _Gerflor
  643.  
  644.      moveq     #0,d2
  645.      move.b    (a3),d2
  646.      move.l    a1,d3
  647.      st        d1
  648.      moveq     #0,d0
  649.      sub.l     a0,a0
  650.      bsr       _Gerflor
  651.  
  652.      add.l     pf_Width(a5),a3
  653.      add.l     #LineSize*TileHeight,d5
  654.      add.l     #LineSize*TileHeight,d6
  655.      add.l     #LineSize*TileHeight,d7
  656.      lea       LineSize*TileHeight(a4),a4
  657.      lea       LineSize*TileHeight(a1),a1
  658.  
  659.      cmp.l     pf_RMBmOffset(a5),d5
  660.      bcs.s     .RDontWrap
  661.  
  662.      move.l    pf_RWBmOffset(a5),d5
  663.      add.l     #BufferWidth-(TileWidth*2),d5
  664.      move.l    d5,d6
  665.      add.l     (a2),d6
  666.      move.l    d5,d7
  667.      add.l     4(a2),d7
  668.      move.l    d5,a4
  669.      add.l     8(a2),a4
  670.      move.l    d5,a1
  671.      add.l     12(a2),a1
  672.  
  673. .RDontWrap:
  674.  
  675.      dbf       d4,.RightLoop
  676.      move.l    d5,pf_RBmOffset(a5)
  677.      move.l    a3,pf_RMapAddr(a5)
  678.  
  679. .Ni:
  680.  
  681.      move.w    (a7)+,d0
  682.      tst.b     pf_UpDownFlag(a5)
  683.      bne.s     .DrwDown
  684.  
  685.      move.w    pf_UpCount(a5),d4
  686.      ble.s     .EkiEkiEkiEkiEkiEkiTaPang
  687.      ext.l     d4
  688.      divu      d0,d4
  689.      move.l    d4,d0
  690.      swap      d0
  691.      tst.w     d0
  692.      bne.s     .URoundUp
  693.      subq.w    #1,d4
  694. .URoundUp:
  695.      sub.w     d4,pf_UpCount(a5)
  696.      sub.w     #1,pf_UpCount(a5)
  697.  
  698.      move.l    pf_UBmOffset(a5),d5
  699.      move.l    d5,d6
  700.      lea       pf_Bitmaps(a5),a2
  701.      add.l     (a2),d6
  702.      move.l    d5,d7
  703.      add.l     4(a2),d7
  704.      move.l    d5,a4
  705.      add.l     8(a2),a4
  706.      move.l    d5,a1
  707.      add.l     12(a2),a1
  708.      move.l    pf_UMapAddr(a5),a3
  709.  
  710. .UpLoop:
  711.      moveq     #0,d2
  712.      move.b    (a3),d2
  713.      move.l    d6,d3
  714.      st        d1
  715.      moveq     #0,d0
  716.      sub.l     a0,a0
  717.      bsr       _Gerflor
  718.  
  719.      moveq     #0,d2
  720.      move.b    (a3),d2
  721.      move.l    d7,d3
  722.      st        d1
  723.      moveq     #0,d0
  724.      sub.l     a0,a0
  725.      bsr       _Gerflor
  726.  
  727.      moveq     #0,d2
  728.      move.b    (a3),d2
  729.      move.l    a4,d3
  730.      st        d1
  731.      moveq     #0,d0
  732.      sub.l     a0,a0
  733.      bsr       _Gerflor
  734.  
  735.      moveq     #0,d2
  736.      move.b    (a3)+,d2
  737.      move.l    a1,d3
  738.      st        d1
  739.      moveq     #0,d0
  740.      sub.l     a0,a0
  741.      bsr       _Gerflor
  742.  
  743.      addq.l    #2,d5
  744.      addq.l    #2,d6
  745.      addq.l    #2,d7
  746.      addq.l    #2,a4
  747.      addq.l    #2,a1
  748.      dbf       d4,.UpLoop
  749.  
  750.      move.l    d5,pf_UBmOffset(a5)
  751.      move.l    a3,pf_UMapAddr(a5)
  752.      bra.s     .EkiEkiEkiEkiEkiEkiTaPang
  753.  
  754. .DrwDown:
  755.      move.w    pf_DownCount(a5),d4
  756.      ble       .EkiEkiEkiEkiEkiEkiTaPang
  757.      ext.l     d4
  758.      divu      d0,d4
  759.      move.l    d4,d0
  760.      swap      d0
  761.      tst.w     d0
  762.      bne.s     .DRoundUp
  763.      subq.w    #1,d4
  764. .DRoundUp:
  765.      sub.w     d4,pf_DownCount(a5)
  766.      sub.w     #1,pf_DownCount(a5)
  767.  
  768.      move.l    pf_DBmOffset(a5),d5
  769.      move.l    d5,d6
  770.      lea       pf_Bitmaps(a5),a2
  771.      add.l     (a2),d6
  772.      move.l    d5,d7
  773.      add.l     4(a2),d7
  774.      move.l    d5,a4
  775.      add.l     8(a2),a4
  776.      move.l    d5,a1
  777.      add.l     12(a2),a1
  778.      move.l    pf_DMapAddr(a5),a3
  779.  
  780. .DownLoop:
  781.      moveq     #0,d2
  782.      move.b    (a3),d2
  783.      move.l    d6,d3
  784.      st        d1
  785.      moveq     #0,d0
  786.      sub.l     a0,a0
  787.      bsr       _Gerflor
  788.  
  789.      moveq     #0,d2
  790.      move.b    (a3),d2
  791.      move.l    d7,d3
  792.      st        d1
  793.      moveq     #0,d0
  794.      sub.l     a0,a0
  795.      bsr       _Gerflor
  796.  
  797.      moveq     #0,d2
  798.      move.b    (a3),d2
  799.      move.l    a4,d3
  800.      st        d1
  801.      moveq     #0,d0
  802.      sub.l     a0,a0
  803.      bsr       _Gerflor
  804.  
  805.      moveq     #0,d2
  806.      move.b    (a3)+,d2
  807.      move.l    a1,d3
  808.      st        d1
  809.      moveq     #0,d0
  810.      sub.l     a0,a0
  811.      bsr       _Gerflor
  812.  
  813.      addq.l    #2,d5
  814.      addq.l    #2,d6
  815.      addq.l    #2,d7
  816.      addq.l    #2,a4
  817.      addq.l    #2,a1
  818.      dbf       d4,.DownLoop
  819.  
  820.      move.l    d5,pf_DBmOffset(a5)
  821.      move.l    a3,pf_DMapAddr(a5)
  822.  
  823. .EkiEkiEkiEkiEkiEkiTaPang:
  824.  
  825.      rts
  826. ;fe
  827.  
  828. ;fs "_Gerflor"
  829.  
  830.  
  831.  
  832.  
  833.  
  834. ;_Gerflor:         ; d2=Tile Nb d1=Scrolling flag d3=Dest
  835.      ;rts
  836.      move.l    a4,-(a7)
  837.      lea       _DTBlit(pc),a0
  838.      bsr       _GetBlitNode
  839.      move.l    a1,a0
  840.      ;lsl.l     #TileSizeSh,d2
  841.      mulu      #TileWidth*TileHeight*NbPlanes*2,d2
  842.      add.l     pf_TilesBank(a5),d2
  843.      move.l    d2,(a0)+
  844.      move.l    d3,(a0)
  845.      tst.b     d1
  846.      beq.s     .NoScroll
  847.      bsr       _AddBlitNode
  848.      move.l    (a7)+,a4
  849.      rts
  850. .NoScroll:
  851.      move.l    a1,d0
  852.      sub.l     #12,d0
  853.      move.l    d0,_LastPlayfieldBlit
  854.      bsr       _AddBlitNode
  855.      move.l    (a7)+,a4
  856.      rts
  857. _DTBlit:
  858.      move.w    #$f,$dff180
  859.      tst.b     d0
  860.      bne.s     .Raaah
  861.  
  862.      move.l    #$09f00000,bltcon0(a6)
  863.      move.l    #-1,bltafwm(a6)
  864.      clr.w     bltamod(a6)
  865.      move.w    #BufferWidth-2,bltdmod(a6)
  866.  
  867. .Raaah:
  868.      move.l    (a0)+,bltapt(a6)
  869.      move.l    (a0),bltdpt(a6)
  870.      move.w    #16*NbPlanes*64+1,bltsize(a6)
  871.  
  872.      clr.w     $dff180
  873.      cmp.l     #2,-8(a0)
  874.      beq.s     .Gaa
  875.      rts
  876. .Gaa:
  877. ;         lea       _DBufHook,a0
  878.      move.l    a0,_BlitHook
  879.      rts
  880. ;fe
  881. ;fs "CPU _Gerflor"
  882. _Gerflor:          ; d2=Tile Nb d3=Dest
  883.      move.l    a1,-(a7)
  884.      ;move.w    #$f0f,$dff180
  885.      mulu      #TileWidth*TileHeight*NbPlanes*2,d2
  886.      add.l     pf_TilesBank(a5),d2
  887.      move.l    d2,a0
  888.      move.l    d3,a1
  889.      move.l    #BufferWidth,d1
  890.  
  891.      rept      64
  892.      move.w    (a0)+,(a1)
  893.      add.l     d1,a1
  894.      endr
  895.  
  896.      ;clr.w     $dff180
  897.      move.l    (a7)+,a1
  898.      rts
  899. ;fe
  900.  
  901. ;fs "_ChangeBuffers"
  902. _ChangeBuffers:    ; a5=playfield
  903.      movem.l   pf_DispOfst(a5),d0-2
  904.      movem.l   d1-2,pf_DispOfst(a5)
  905.      move.l    d0,pf_CpuWorkOfst(a5)
  906.      rts
  907. ;fe
  908. ;fs "_RefreshBuffer"
  909. _RefreshBuffer:    ; a5=playfield
  910.      ;rts
  911.      ;bsr       _CheckBlitLists
  912.      move.l    pf_WorkOfst(a5),d0
  913.      move.l    pf_RefreshTbls(a5,d0.l),a4
  914.      move.l    a4,pf_RefreshPtrs(a5,d0.l)
  915.  
  916. .Loop:
  917.      tst.l     2(a4)
  918.      bmi.s     .Done
  919.  
  920.      lea       _ClrBlit(pc),a0
  921.      lea       _ClrCPU(pc),a1
  922.      move.l    a1,d1
  923.      moveq     #1,d0
  924.      bsr       _GetBlitNode
  925.      move.l    a1,_LastPlayfieldBlit
  926.  
  927.      movem.l   (a4)+,d0-2
  928.      movem.l   d0-2,(a1)
  929.      move.w    (a4)+,12(a1)
  930.  
  931.      bsr       _AddCPUBlitNode
  932.  
  933.      bra.s     .Loop
  934.  
  935. .Done:
  936.      ;bsr       _CheckBlitLists
  937.      rts
  938.  
  939. _ClrBlit:
  940.      ;bsr       _CheckBlitLists
  941.      move.l    a0,-(a7)
  942.      tst.b     d0
  943.      bne.s     .Raaah
  944.  
  945.      move.l    #$09f00000,bltcon0(a6)
  946.      moveq     #-1,d0
  947.      move.l    d0,bltafwm(a6)
  948.  
  949. .Raaah:
  950.      move.w    (a0)+,d0
  951.      move.w    d0,bltamod(a6)
  952.      move.w    d0,bltdmod(a6)
  953.  
  954.      move.l    (a0)+,bltapt(a6)
  955.      move.l    (a0)+,bltdpt(a6)
  956.  
  957.      move.w    (a0)+,bltsizv(a6)
  958.      move.w    (a0),bltsizh(a6)
  959.  
  960.      move.l    (a7)+,a0
  961.      cmp.l     #2,-4(a0)
  962.      beq.s     .Gaa
  963.      ;bsr       _CheckBlitLists
  964.      rts
  965. .Gaa:
  966.      lea       _CBufHook,a0
  967.      move.l    a0,_BlitHook
  968.      ;bsr       _CheckBlitLists
  969.      rts
  970.  
  971. _ClrCPU:
  972.      move.w    (a0)+,d0
  973.      addq.w    #1,d0
  974.      and.b     #$fc,d0
  975.  
  976.      move.l    (a0)+,d1
  977.      and.b     #$fc,d1
  978.      move.l    d1,a1
  979.  
  980.      move.l    (a0)+,d1
  981.      and.b     #$fc,d1
  982.      move.l    d1,a2
  983.  
  984.      move.w    (a0)+,d1
  985.      subq.w    #1,d1
  986.  
  987.      move.w    (a0)+,d2
  988.      addq.w    #1,d2
  989.      lsr.w     #1,d2
  990.      subq.w    #1,d2
  991.      ;move.w    #$00f,$dff180
  992.  
  993. .YLoop:
  994.      move.w    d2,d3
  995.  
  996. .XLoop:
  997.      move.l    (a1)+,(a2)+
  998.      ;clr.l     (a2)
  999.      ;clr.l     (a2)+
  1000.      dbf       d3,.XLoop
  1001.  
  1002.      add.w     d0,a1
  1003.      add.w     d0,a2
  1004.  
  1005.      dbf       d1,.YLoop
  1006.  
  1007.      rts
  1008. ;fe
  1009. ;fs "_DrawSpriteList"
  1010. _DrawSpriteList:   ; a5=Playfield
  1011.      move.l    pf_Sprites(a5),a4
  1012.      move.l    a4,a3
  1013.  
  1014. .Loop:
  1015.      move.l    (a3),d0
  1016.      beq.s     .Done
  1017.      move.l    d0,a3
  1018.      bsr.s     _DrawSprite
  1019.      bra.s     .Loop
  1020.  
  1021. .Done:
  1022.      move.l    pf_WorkOfst(a5),d0
  1023.      move.l    pf_RefreshPtrs(a5,d0.l),a0
  1024.      moveq     #-1,d0
  1025.      move.l    d0,2(a0)
  1026.      rts
  1027. ;fe
  1028. ;fs "_DrawSprite"
  1029. _DrawSprite:       ; a3=Sprite a4=SpritesHeader a5=Playfield
  1030.      ;bsr       _CheckBlitLists
  1031.      movem.l   a3-4,-(a7)
  1032.      move.l    sh_PosOfst(a4),d0
  1033.      ;bchg      #4,d0
  1034.      move.l    sh_Playfield(a4),a0
  1035.      lea       sp_Pos(a3),a4
  1036.      add.l     d0,a4
  1037.      move.l    spp_Data(a4),a3
  1038.  
  1039.      movem.l   (a4),d6-7
  1040.  
  1041.      sub.l     spd_Hx(a3),d6
  1042.      sub.l     spd_Hy(a3),d7
  1043.  
  1044.      move.l    pf_X16(a0),d0
  1045.      subq.l    #4,d0
  1046.      lsl.l     #4,d0
  1047.      sub.l     d0,d6
  1048.  
  1049.      move.l    pf_Y16(a0),d0
  1050.      subq.l    #4,d0
  1051.      lsl.l     #4,d0
  1052.      sub.l     d0,d7
  1053.  
  1054.      cmp.l     #BufferWidth*8,d6
  1055.      bge.s     .OffScreen
  1056.      cmp.l     #BufferHeight,d7
  1057.      bge.s     .OffScreen
  1058.  
  1059.      move.l    d6,d0
  1060.      add.l     spd_Width(a3),d0
  1061.      bmi.s     .OffScreen
  1062.  
  1063.      move.l    d7,d1
  1064.      add.l     spd_Height(a3),d1
  1065.      subq.l    #1,d1
  1066.      bpl.s     .Ok
  1067.  
  1068. .OffScreen:
  1069.      ;bsr       _CheckBlitLists
  1070.      movem.l   (a7)+,a3-4
  1071.      rts
  1072.  
  1073. .Ok:
  1074.      ;link      a4,#-8
  1075.      ;movem.l   d7/a3,-(a7)
  1076.  
  1077.      move.l    pf_WrapPos(a5),d0
  1078.  
  1079.      cmp.l     d0,d7
  1080.      bcc.s     DS_Normal
  1081.  
  1082.      cmp.l     d0,d1
  1083.      bcc.s     DS_Splitted
  1084.  
  1085. DS_Normal:
  1086.      move.l    d7,-(a7)
  1087.      move.l    d6,d5
  1088.      and.l     #$f,d5
  1089.      move.l    d5,d4
  1090.      ror.w     #4,d5
  1091.      move.w    d5,d0
  1092.      swap      d5
  1093.      move.w    d0,d5
  1094.      or.l      #$0fca0000,d5
  1095.  
  1096.      lea       _DSBlit(pc),a0
  1097.      lea       _DSCPU(pc),a1
  1098.      move.l    a1,d1
  1099.      moveq     #1,d0
  1100.      bsr       _GetBlitNode
  1101.      move.l    a1,a0
  1102.  
  1103.      move.l    d4,(a0)+
  1104.  
  1105.      move.l    d5,(a0)+
  1106.  
  1107.      move.w    spd_WWidth+2(a3),d5
  1108.      addq.w    #1,d5
  1109.  
  1110.      movem.l   spd_Bitmap(a3),d3-4
  1111.  
  1112.      move.w    #BufferWidth,d1
  1113.      sub.w     d5,d1
  1114.      sub.w     d5,d1
  1115.  
  1116.      muls      #LineSize,d7
  1117.      move.l    d6,d0
  1118.      asr.l     #4,d0
  1119.      ;move.l    d0,-4(a4)
  1120.      add.l     d0,d7
  1121.      add.l     d0,d7
  1122.  
  1123.      add.l     pf_VBitmapOffset(a5),d7
  1124.      move.l    #BufferHeight*LineSize,d2
  1125.      cmp.l     d2,d7
  1126.      bcs.s     .Ok
  1127.      sub.l     d2,d7
  1128. .Ok:
  1129.      move.l    pf_X16(a5),d2
  1130.      add.l     d2,d2
  1131.      add.l     d2,d7
  1132.  
  1133.      moveq     #-2,d2
  1134.  
  1135.      tst.l     d6
  1136.      ;addq.l    #8,d6
  1137.      ;addq.l    #8,d6
  1138.      bpl.s     .LeftOk
  1139.  
  1140.      neg.l     d6
  1141.      lsr.l     #4,d6
  1142.      sub.l     d6,d5
  1143.      ;add.l     d6,-4(a4)
  1144.      add.l     d6,d6
  1145.  
  1146.      add.l     d6,d3
  1147.      add.l     d6,d4
  1148.      add.l     d6,d7
  1149.  
  1150.      add.l     d6,d2
  1151.      add.l     d6,d1
  1152.  
  1153. .LeftOk:
  1154.  
  1155.      add.l     spd_WWidth(a3),d0
  1156.      sub.l     #BufferWidth/2-TileWidth,d0
  1157.      bmi.s     .RightOk
  1158.  
  1159.      sub.l     d0,d5
  1160.  
  1161.      add.l     d0,d0
  1162.      add.l     d0,d2
  1163.      add.l     d0,d1
  1164.  
  1165. .RightOk:
  1166.  
  1167.      move.l    pf_WorkOfst(a5),d0
  1168.      move.l    pf_RefreshPtrs(a5,d0.l),a4
  1169.  
  1170.      move.w    d2,(a0)+
  1171.      move.w    d1,(a0)+
  1172.  
  1173.      move.w    d1,(a4)+
  1174.  
  1175.      move.w    spd_Height+2(a3),d2
  1176.  
  1177.      move.l    (a7)+,d6
  1178.  
  1179.      move.l    d6,d0
  1180.      add.l     #TileHeight,d0
  1181.      bpl.s     .UpOk
  1182.  
  1183.      neg.l     d0
  1184.      sub.l     d0,d2
  1185.      move.l    d0,d1
  1186.      mulu      spd_WWidth(a3),d0
  1187.      mulu      #NbPlanes*2,d0
  1188.      add.l     d0,d3
  1189.      add.l     d0,d4
  1190.  
  1191.      mulu      #LineSize,d1
  1192.      add.l     d1,d7
  1193.  
  1194. .UpOk:
  1195.  
  1196.      move.l    pf_ClearBuffer(a5),d0
  1197.      add.l     d7,d0
  1198.      move.l    d0,(a4)+
  1199.  
  1200.      move.l    pf_WorkOfst(a5),d0
  1201.      add.l     pf_Bitmaps(a5,d0.l),d7
  1202.      move.l    d7,(a4)+
  1203.  
  1204.      move.l    d4,(a0)+
  1205.      move.l    d3,(a0)+
  1206.      move.l    d7,(a0)+
  1207.  
  1208.      add.w     spd_Height(a3),d6
  1209.      sub.l     #BufferHeight-TileHeight,d6
  1210.      bmi.s     .DownOk
  1211.  
  1212.      sub.l     d6,d2
  1213.  
  1214. .DownOk:
  1215.  
  1216.      mulu      #NbPlanes,d2
  1217.      move.w    d2,(a0)+
  1218.      move.w    d5,(a0)
  1219.  
  1220.      movem.w   d2/d5,(a4)
  1221.      addq.l    #4,a4
  1222.      move.l    a4,pf_RefreshPtrs(a5,d0.l)
  1223.  
  1224.      move.l    a1,_LastPlayfieldBlit
  1225.      bsr       _AddCPUBlitNode
  1226.  
  1227.      movem.l   (a7)+,a3-4
  1228.      rts
  1229.  
  1230. DS_Splitted:
  1231.      move.l    d7,d2
  1232.      sub.l     d7,d0
  1233.      move.l    d0,d4
  1234.  
  1235.      move.l    d6,d5
  1236.      and.l     #$f,d5
  1237.      move.l    d5,d3
  1238.      ror.w     #4,d5
  1239.      move.w    d5,d0
  1240.      swap      d5
  1241.      move.w    d0,d5
  1242.      or.l      #$0fca0000,d5
  1243.  
  1244.      lea       _DSBlit(pc),a0
  1245.      lea       _DSCPU(pc),a1
  1246.      move.l    a1,d1
  1247.      moveq     #1,d0
  1248.      bsr       _GetBlitNode
  1249.      move.l    a1,-(a7)
  1250.      lea       _DSBlit(pc),a0
  1251.      lea       _DSCPU(pc),a1
  1252.      move.l    a1,d1
  1253.      moveq     #1,d0
  1254.      bsr       _GetBlitNode
  1255.      move.l    (a7),a0
  1256.      move.l    a1,-(a7)
  1257.      move.l    d4,-(a7)
  1258.  
  1259.      move.l    d3,(a0)+
  1260.      move.l    d3,(a1)+
  1261.  
  1262.      move.l    d5,(a0)+
  1263.      move.l    d5,(a1)+
  1264.  
  1265.      move.w    spd_WWidth+2(a3),d5
  1266.      addq.w    #1,d5
  1267.  
  1268.      movem.l   spd_Bitmap(a3),d3-4
  1269.  
  1270.      move.w    #BufferWidth,d1
  1271.      sub.w     d5,d1
  1272.      sub.w     d5,d1
  1273.  
  1274.      mulu      #LineSize,d7
  1275.      move.l    d6,d0
  1276.      asr.l     #4,d0
  1277.      add.l     d0,d7
  1278.      add.l     d0,d7
  1279.      move.l    d0,-(a7)
  1280.      move.l    d2,-(a7)
  1281.  
  1282.      add.l     pf_VBitmapOffset(a5),d7
  1283.      move.l    #BufferHeight*LineSize,d2
  1284.      cmp.l     d2,d7
  1285.      bcs.s     .Ok
  1286.      sub.l     d2,d7
  1287. .Ok:
  1288.      move.l    pf_X16(a5),d2
  1289.      add.l     d2,d7
  1290.      add.l     d2,d7
  1291.      add.l     d2,4(a7)
  1292.  
  1293.      moveq     #-2,d2
  1294.  
  1295.      ;addq.l    #8,d6
  1296.      ;addq.l    #8,d6
  1297.      tst.l     d6
  1298.      bpl.s     .LeftOk
  1299.  
  1300.      neg.l     d6
  1301.      lsr.l     #4,d6
  1302.      sub.l     d6,d5
  1303.      add.l     d6,d6
  1304.  
  1305.      add.l     d6,d3
  1306.      add.l     d6,d4
  1307.      add.l     d6,d7
  1308.  
  1309.      add.l     d6,d2
  1310.      add.l     d6,d1
  1311.  
  1312. .LeftOk:
  1313.  
  1314.      add.l     spd_WWidth(a3),d0
  1315.      sub.l     #BufferWidth/2-TileWidth,d0
  1316.      bmi.s     .RightOk
  1317.  
  1318.      sub.l     d0,d5
  1319.  
  1320.      add.l     d0,d0
  1321.      add.l     d0,d2
  1322.      add.l     d0,d1
  1323.  
  1324. .RightOk:
  1325.  
  1326.      move.l    pf_WorkOfst(a5),d0
  1327.      move.l    pf_RefreshPtrs(a5,d0.l),a4
  1328.  
  1329.      move.w    d2,(a0)+
  1330.      move.w    d1,(a0)+
  1331.      move.w    d2,(a1)+
  1332.      move.w    d1,(a1)+
  1333.  
  1334.      move.w    d1,14(a4)
  1335.      move.w    d1,(a4)+
  1336.  
  1337.      move.l    spd_Height(a3),d2
  1338.      ;move.l    d2,$8c00000
  1339.      move.l    (a7)+,d6
  1340.  
  1341.      move.l    d6,d0
  1342.      add.l     #TileHeight,d0
  1343.      bpl.s     .UpOk
  1344.  
  1345.      neg.l     d0
  1346.      sub.l     d0,d2
  1347.      move.l    d0,d1
  1348.      mulu      spd_WWidth+2(a3),d0
  1349.      mulu      #NbPlanes*2,d0
  1350.      add.l     d0,d3
  1351.      add.l     d0,d4
  1352.  
  1353.      mulu      #LineSize,d1
  1354.      add.l     d1,d7
  1355.  
  1356. .UpOk:
  1357.      move.l    pf_ClearBuffer(a5),d0
  1358.      add.l     d7,d0
  1359.      move.l    d0,14(a4)
  1360.  
  1361.      move.l    pf_WorkOfst(a5),d0
  1362.      lea       pf_Bitmaps(a5,d0.l),a2
  1363.      add.l     (a2),d7
  1364.      move.l    d7,18(a4)
  1365.  
  1366.      move.l    d4,(a0)+
  1367.      move.l    d3,(a0)+
  1368.      move.l    d7,(a0)+
  1369.  
  1370.      move.l    pf_ClearBuffer(a5),a6
  1371.      lea       pf_RefreshPtrs(a5,d0.l),a5
  1372.  
  1373.      movem.l   (a7)+,d0-1
  1374.      add.l     d0,d0
  1375.  
  1376.      add.l     d0,a6
  1377.      move.l    a6,(a4)+
  1378.      lea       CustomBase,a6
  1379.  
  1380.      add.l     (a2),d0
  1381.      move.l    d0,(a4)+
  1382.  
  1383.      mulu      #NbPlanes,d1
  1384.      move.l    d1,d7
  1385.      mulu      spd_WWidth+2(a3),d1
  1386.  
  1387.      add.l     d1,d1
  1388.      add.l     d1,d3
  1389.      add.l     d1,d4
  1390.  
  1391.      move.l    d4,(a1)+
  1392.      move.l    d3,(a1)+
  1393.      move.l    d0,(a1)+
  1394.  
  1395.      move.l    d6,$8c00000
  1396.  
  1397.      add.w     spd_Height(a3),d6
  1398.      sub.l     #BufferHeight-TileHeight,d6
  1399.      bmi.s     .DownOk
  1400.  
  1401.      sub.l     d6,d2
  1402.  
  1403. .DownOk:
  1404.      mulu      #NbPlanes,d2
  1405.      move.l    a1,a2
  1406.      move.l    (a7)+,a1
  1407.  
  1408.      clr.w     (a4)
  1409.  
  1410.      sub.l     d7,d2
  1411.      bgt.s     .SecPartOk
  1412.  
  1413.      ;move.l    d7,$8c00000
  1414.  
  1415.      bsr       _CancelBlit
  1416.      bra.s     .DoFirstPart
  1417.  
  1418. .SecPartOk:
  1419.      move.w    d2,(a2)+
  1420.      move.w    d5,(a2)
  1421.  
  1422.      movem.w   d2/d5,(a4)
  1423.  
  1424.      bsr       _PreAddCPUBlitNode
  1425.  
  1426. .DoFirstPart:
  1427.      move.l    (a7)+,a1
  1428.      move.w    d7,(a0)+
  1429.      move.w    d5,(a0)
  1430.  
  1431.      move.w    d7,14(a4)
  1432.      move.w    d5,16(a4)
  1433.      lea       18(a4),a4
  1434.      move.l    a4,(a5)
  1435.  
  1436.      move.l    a1,_LastPlayfieldBlit
  1437.      bsr       _AddCPUBlitNode
  1438.  
  1439.      ;movem.l   (a7)+,d4/a3
  1440.      movem.l   (a7)+,a3-4
  1441.      rts
  1442.  
  1443. _DSBlit:
  1444.      ;bsr       _CheckBlitLists
  1445.      ;rts
  1446.      ;move.w    #$f80,$dff180
  1447.      move.l    a0,-(a7)
  1448.      addq.l    #4,a0
  1449.      move.l    (a0)+,bltcon0(a6)
  1450.      moveq     #-1,d0
  1451.      clr.w     d0
  1452.      move.l    d0,bltafwm(a6)
  1453.      move.w    (a0)+,d0
  1454.      move.w    d0,bltamod(a6)
  1455.      move.w    d0,bltbmod(a6)
  1456.      move.w    (a0)+,d0
  1457.      move.w    d0,bltcmod(a6)
  1458.      move.w    d0,bltdmod(a6)
  1459.      move.l    (a0)+,bltapt(a6)
  1460.      move.l    (a0)+,bltbpt(a6)
  1461.      move.l    (a0)+,d0
  1462.      move.l    d0,bltcpt(a6)
  1463.      move.l    d0,bltdpt(a6)
  1464.      move.w    (a0)+,bltsizv(a6)
  1465.      move.w    (a0),bltsizh(a6)
  1466.  
  1467.      move.l    (a7)+,a0
  1468.      cmp.l     #2,-4(a0)
  1469.      beq.s     .Gaa
  1470.      ;bsr       _CheckBlitLists
  1471.      rts
  1472. .Gaa:
  1473.  
  1474.      ;move.w    $dff006,d0
  1475.      ;and.w     #$ff0,d0
  1476.      ;move.w    d0,$dff180
  1477.      ;btst      #6,$dff016
  1478.      ;bne.s     .Gaa
  1479. .guuu:
  1480.      ;btst      #6,$dff016
  1481.      ;beq.s     .guuu
  1482.  
  1483.      lea       _CBufHook,a0
  1484.      move.l    a0,_BlitHook
  1485.      ;bsr       _CheckBlitLists
  1486.      rts
  1487.  
  1488. _DSCPU:
  1489.      ;rts
  1490.      move.l    (a0),d3
  1491.      addq.l    #8,a0
  1492.  
  1493.      movem.w   (a0)+,d6-7
  1494.      addq.w    #1,d6
  1495.      and.b     #$fc,d6
  1496.      addq.w    #1,d7
  1497.      and.b     #$fc,d7
  1498.      move.w    d6,a4
  1499.      move.w    d7,a5
  1500.  
  1501.      movem.l   (a0)+,d5-7
  1502.  
  1503.      btst      #1,d7
  1504.      beq.s     .ShiftOk
  1505.      add.w     #16,d3
  1506. .ShiftOk:
  1507.  
  1508.      and.b     #$fc,d5
  1509.      and.b     #$fc,d6
  1510.      and.b     #$fc,d7
  1511.  
  1512.      move.w    (a0)+,a6
  1513.      move.w    (a0),d2
  1514.      addq.l    #1,d2
  1515.      lsr.w     #1,d2
  1516.      subq.l    #1,d2
  1517.      move.w    d2,a0
  1518.  
  1519.      move.l    d6,a1
  1520.      move.l    d5,a2
  1521.      move.l    d7,a3
  1522.  
  1523. .Beuah:
  1524.      move.l    a0,d2
  1525.      moveq     #0,d6
  1526.      moveq     #0,d7
  1527.  
  1528. .Gleurp:
  1529.      move.l    (a1)+,d0
  1530.  
  1531.      moveq     #-1,d4
  1532.      lsr.l     d3,d4
  1533.  
  1534.      ror.l     d3,d0
  1535.      move.l    d0,d5
  1536.      and.l     d4,d0
  1537.      eor.l     d0,d5
  1538.      or.l      d6,d0
  1539.      move.l    d5,d6
  1540.  
  1541.      tst.w     d2
  1542.      bne.s     .LwOk
  1543.      moveq     #0,d1
  1544.      addq.l    #4,a2
  1545.      bra.s     .LwMsk
  1546. .LwOk:
  1547.  
  1548.      move.l    (a2)+,d1
  1549.  
  1550.      ror.l     d3,d1
  1551.      move.l    d1,d5
  1552.      and.l     d4,d1
  1553.      eor.l     d1,d5
  1554.  
  1555. .LwMsk:
  1556.      or.l      d7,d1
  1557.      move.l    d5,d7
  1558.  
  1559.      move.l    (a3),d4
  1560.      and.l     d1,d0
  1561.      ;not.l     d1
  1562.      and.l     d1,d4
  1563.      or.l      d0,d4
  1564.  
  1565.      move.l    d1,(a3)+
  1566.  
  1567.      dbf       d2,.Gleurp
  1568.  
  1569.      add.l     a4,a1
  1570.      add.l     a4,a2
  1571.      add.l     a5,a3
  1572.  
  1573.      subq.l    #1,a6
  1574.      move.l    a6,d2
  1575.      bne.s     .Beuah
  1576.  
  1577.      rts
  1578. ;fe
  1579.